<?php

namespace Chaosyeo\SolarEngine\Event;

class PurchaseProperties extends Properties
{
    // 支付状态
    const PAY_STATUS_SUCCESS = 1;    // 支付成功
    const PAY_STATUS_FAIL    = 2;    // 支付失败

    protected $orderId;            // 订单 ID
    protected $payAmount;          // 支付金额
    protected $currencyType;       // 货币类型
    protected $payType;            // 支付方式
    protected $productId;          // 商品ID
    protected $productName;        // 商品名称
    protected $productNum;         // 商品数量
    protected $payStatus;          // 支付状态
    protected $failReason;         // 失败原因

    /**
     * @param float $payAmount 支付金额（必传）
     * @param string $currencyType 货币类型（必传）
     * @param int $payStatus 支付状态（必传）
     * @param array $params 可选参数数组，可包含：
     *   - orderId: string 订单 ID
     *   - payType: string 支付方式
     *   - productId: string 商品ID
     *   - productName: string 商品名称
     *   - productNum: int 商品数量
     *   - failReason: string 失败原因
     */
    public function __construct(int $platform, float $payAmount, string $currencyType, int $payStatus, array $params = [], array $customProperties = [])
    {
        if ($payAmount <= 0) {
            throw new \InvalidArgumentException('Pay amount must be greater than 0');
        }

        if (empty($currencyType)) {
            throw new \InvalidArgumentException('Currency type is required');
        }

        if (!in_array($payStatus, [self::PAY_STATUS_SUCCESS, self::PAY_STATUS_FAIL])) {
            throw new \InvalidArgumentException('Invalid pay status');
        }

        $this->payAmount    = $payAmount;
        $this->currencyType = $currencyType;
        $this->payStatus    = $payStatus;

        parent::__construct($platform, $params, $customProperties);
    }
}